/*********************************************************************************************
    *   Filename        : app_connected.h

    *   Description     :

    *   Author          : Weixin Liang

    *   Email           : liangweixin@zh-jieli.com

    *   Last modifiled  : 2022-12-15 14:34

    *   Copyright:(c)JIELI  2011-2022  @ , All Rights Reserved.
*********************************************************************************************/
#ifndef _APP_CONNECTED_H
#define _APP_CONNECTED_H

/*  Include header */
#include "typedef.h"

#ifdef __cplusplus
extern "C" {
#endif

/**************************************************************************************************
  Data Types
**************************************************************************************************/
enum {
    APP_CONNECTED_STATUS_STOP = 0x1,		// 功能停止状态
    APP_CONNECTED_STATUS_START = 0x2,		// 功能开启状态
    APP_CONNECTED_STATUS_SUSPEND = 0x4,		// 功能挂起状态
    APP_CONNECTED_STATUS_CONNECT = 0x8,		// 有设备连接状态
    APP_CONNECTED_STATUS_DISCONNECT = 0x10,	// 断连状态
    APP_CONNECTED_STATUS_MUSIC = 0x20,		// 播歌状态
    APP_CONNECTED_STATUS_PHONE_CALL = 0x40, // 通话状态
}; // CIG状态


/**************************************************************************************************
  Function Declarations
**************************************************************************************************/

/* --------------------------------------------------------------------------*/
/**
 * @brief 开启CIG
 */
/* ----------------------------------------------------------------------------*/
void app_connected_open(void);

/* --------------------------------------------------------------------------*/
/**
 * @brief 关闭对应cig_hdl的CIG连接
 *
 * @param cig_hdl:需要关闭的CIG连接对应的hdl
 * @param status:关闭后CIG进入的APP_CONNECTED_STATUS_STOP还是APP_CONNECTED_STATUS_SUSPEND状态
 */
/* ----------------------------------------------------------------------------*/
void app_connected_close(u8 cig_hdl, u8 status);

/* --------------------------------------------------------------------------*/
/**
 * @brief 关闭所有cig_hdl的CIG连接
 *
 * @param status:关闭后CIG进入的APP_CONNECTED_STATUS_STOP还是APP_CONNECTED_STATUS_SUSPEND状态
 */
/* ----------------------------------------------------------------------------*/
void app_connected_close_all(u8 status);

/* ----------------------------------------------------------------------------*/
/**
 * @brief le audio功能总退出函数，用于模式切换
 */
/* ----------------------------------------------------------------------------*/
void le_audio_profile_exit();

/* --------------------------------------------------------------------------*/
/**
 * @brief CIG开关切换
 *
 * @return -1:切换失败，0:切换成功
 */
/* ----------------------------------------------------------------------------*/
int app_connected_switch(void);

/* --------------------------------------------------------------------------*/
/**
 * @brief CIG资源初始化
 */
/* ----------------------------------------------------------------------------*/
void app_connected_init(void);

/* --------------------------------------------------------------------------*/
/**
 * @brief CIG资源卸载
 */
/* ----------------------------------------------------------------------------*/
void app_connected_uninit(void);

/* --------------------------------------------------------------------------*/
/**
 * @brief 非蓝牙后台情况下，在其他音源模式开启CIG，前提要先开蓝牙协议栈
 */
/* ----------------------------------------------------------------------------*/
void app_connected_open_in_other_mode();

/* --------------------------------------------------------------------------*/
/**
 * @brief
 * @brief 非蓝牙后台情况下，在其他音源模式关闭CIG
 */
/* ----------------------------------------------------------------------------*/
void app_connected_close_in_other_mode();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 判断cig acl是否已被连接
 *
 * @return 1:已连接 0:未连接
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_acl_conn();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 判断tws另一端cig acl是否已被连接
 *
 * @return 1:已连接 0:未连接
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_other_acl_conn();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 判断cig是否已被连接
 *
 * @return 1:已连接 0:未连接
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_phone_conn();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 判断tws另一端cig是否已被连接
 *
 * @return 1:已连接 0:未连接
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_other_phone_conn();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 从vm读取是否支持le_audio功能
 *
 * @return 1:支持 0:不支持
 */
/* ----------------------------------------------------------------------------*/
u8 get_bt_le_audio_config_for_vm();

/* ----------------------------------------------------------------------------*/
/**
 * @brief 是否支持le_audio功能
 *
 * @return 1:支持 0:不支持
 */
/* ----------------------------------------------------------------------------*/
u8 get_bt_le_audio_config();


/* ----------------------------------------------------------------------------*/
/**
 * @brief 注册一个函数结构体指针，用于操作音频接收和发送的open和close
 *
 * @param   mode : reserve
 * @return  0: success
 */
/* ----------------------------------------------------------------------------*/
int le_audio_ops_register(u8 mode);

/* ----------------------------------------------------------------------------*/
/**
 * @brief  主从直接的le audio连接状态信息同步
 *
 * @param   void
 * @return  void
 */
/* ----------------------------------------------------------------------------*/
void tws_sync_le_audio_conn_info();

/* ----------------------------------------------------------------------------*/
/**
 * @brief  一开始设计是用于app动态配置le audio的功能开关，配置会记录在VM
 *
 * @param   le_auido_en  1-enable   0-disable
 * @return  void
 */
/* ----------------------------------------------------------------------------*/
void le_audio_surport_config(u8 le_auido_en);

/* --------------------------------------------------------------------------*/
/**
 * @brief   le audio状态查询函数， 是否在音乐播放状态，
 *
 * @return 1：在le audio音乐播放  0：不在音乐播放
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_music_play();
/* --------------------------------------------------------------------------*/
/**
 * @brief   le audio状态查询函数， tws另一个耳机是否在音乐播放状态
 *
 * @return  1：在le audio音乐播放  0：不在音乐播放
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_other_music_play();
/* --------------------------------------------------------------------------*/
/**
 * @brief   le audio状态查询函数, 是否在通话状态
 *
 * @return 1：在le audio通话状态  0：不在通话状态
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_phone_call_play();
/* --------------------------------------------------------------------------*/
/**
 * @brief   le audio状态查询函数, tws另一个耳机是否在通话状态
 *
 * @return  1：在le audio通话状态  0：不在通话状态
 */
/* ----------------------------------------------------------------------------*/
u8 is_cig_other_phone_call_play();

/* --------------------------------------------------------------------------*/
/**
 * @brief   le audio媒体控制接口
 *
 * @return
 */
/* ----------------------------------------------------------------------------*/
void le_audio_media_control_cmd(u8 *data, u8 len);

#ifdef __cplusplus
};
#endif

#endif

